package bangry.chat.server.control;
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.Vector;

import javax.swing.JOptionPane;

import com.sun.org.apache.bcel.internal.generic.FNEG;

import bangry.chat.server.ui.ServerMonitor;

// ServerSocket을 이용한 채팅서버
public class ChatServer extends Thread{
	private ServerSocket ss;
	private int port ;
	private ChatManager chatManager;
	
	public static final String waitRoomName = "대기실";
	
	
	public ChatServer(int port){
		this.port = port;
		chatManager = ChatManager.getInstance();
	}
	
	public void serverStart(){
		try {
			ss = new ServerSocket(port);
			ServerMonitor.getInstance().appendMessage("★★★★★★ 방그리 채팅서버["+port+"] 구동 완료 ★★★★★\n\n");
			ServerMonitor.getInstance().appendMessage("---------- 클라이언트 접속 대기중 ----------\n");
			
			// 디폴트 대기실 생성
			chatManager.makeChatRoom("대기실", 50, "Admin", true);
			
		} catch (IOException e1) {
			JOptionPane.showMessageDialog(null, "채팅서버 구동 실패하였습니다.\n관리자에게 문의하여 주세요.", "서버 구동 실패", JOptionPane.ERROR_MESSAGE);
			return;
		}		
				
		while(!isInterrupted()){
			Socket clientSocket = null;
			try {
				clientSocket = ss.accept();
				
				ServerMonitor.getInstance().appendMessage("▷ 클라이언트[" + clientSocket.getInetAddress().getHostAddress() + "] 연결해옴...\n");
				
				// 클라이언트 통신을 대행하는 스레드 생성/실행
				ConnectionChatClient client = new ConnectionChatClient(clientSocket);
				client.start();
				
				// 접속한 클라이언트 등록
				chatManager.registChatClient(client);
					
				
			} catch (IOException e) {
				break;
			}			
		}		
	}
	
	public void serverStop(){
		try {
			if(ss != null) ss.close();
		} catch (IOException e) {}	
	}
	
	public void run(){
		System.out.println("채팅서버스레드 시작됨");
			serverStart();				
		System.err.println("채팅서버스레드 종료됨");
	}
	
}
